package com.dragon.pear.pages.common.main;

import androidx.navigation.NavController;
import androidx.navigation.Navigation;
import androidx.navigation.ui.NavigationUI;

import com.chris.lib.colordialog.util.DisplayUtil;
import com.chris.libs.base.x.mvpp.mvpp.AbsStandardActivityViewProxy;
import com.chris.libs.devtools.x.v1.utils.ScreenUtils;
import com.google.android.material.badge.BadgeDrawable;
import com.dragon.pear.R;

import javax.inject.Inject;

/**
 * @author Chris Chan
 * Create on 2025-02-05 01:47
 * Use for:
 * Explain:
 * 1. 继承定义好的抽象类AbsStandardActivityViewProxy，节省代码量
 * 2. 实现契约定义好的View接口，以保持和Presenter的交互
 */
public class MainViewProxy extends AbsStandardActivityViewProxy
        implements MainContract.UIView {
    // 数据中心
    private MainViewModel viewModel;
    // 界面元素持有者
    @Inject
    MainViewHolders.MainViewHolder vh;
    // 业务逻辑处理中心
    @Inject
    MainPresenter presenter;

    // Dagger2注入构造器
    @Inject
    public MainViewProxy() {
    }

    /**
     * 初始化代码，在对象实例创建后执行
     */
    @Override
    protected void init() {
        // 获取数据中心实例
        this.viewModel = getViewModel(MainViewModel.class);
        // 为界面元素持有者绑定根布局，注入式构造器没有传参数，需要手动传入
        this.vh.bind(this.contentView);
        // 为业务逻辑处理器绑定View代理，注入式构造器没有传参数，需要手动传入
        this.presenter.bind(this);
        // 为业务逻辑处理器传递数据中心，使View和Presenter共同联系在一个数据中心上
        this.presenter.setViewModel(this.viewModel);
    }

    /**
     * 初始化控件，界面元素如果有其他逻辑上的修改，可以在此处处理
     */
    @Override
    protected void initView() {
        // 顶部偏移，让出状态栏
        int statueBarHeight = ScreenUtils.getStatueBarHeight();
//        RelativeLayout.LayoutParams layoutParams = (RelativeLayout.LayoutParams) this.contentView.getLayoutParams();
//        layoutParams.setMargins(0, statueBarHeight, 0, 0);
//        this.contentView.setLayoutParams(layoutParams);
        this.contentView.setPadding(0, DisplayUtil.px2dp(this.context,statueBarHeight)+12,0,0);

        // 底部导航栏
        NavController navController = Navigation.findNavController(this.activity, R.id.frg_main_bottom_host);
        NavigationUI.setupWithNavController(this.vh.navMainBottom, navController);

        // 未读消息总数
        BadgeDrawable badgeMessage = this.vh.navMainBottom.getOrCreateBadge(R.id.nav_fra_main_bottom_message);
        badgeMessage.setNumber(66);

    }

    /**
     * 事件设置
     */
    @Override
    protected void setupEvent() {
        // 给LiveData配置订阅事件
        //update(this.viewModel.getInfo(), this.vh.tvInfo::setText);
    }

    /**
     * 一切准备就绪后，可以开始执行第一个逻辑
     */
    @Override
    protected void onReady() {
        // 调用Presenter定义的方法
        //this.presenter.requestAndUpdate();
    }
}
